"""
@-*- coding: utf-8 -*-
@ python：python 3.8
@ 创建人员：ylx
@ 创建时间：2025/5/14 下午3:30
@ 内容：学习Python对json格式的序列化与反序列化，学习json格式
"""
import json

"""
json.dumps() 函数用于将Python对象转换成json格式的字符串
接受一个Python对象，并返回该对象的json字符串表示形式
ensure_ascii 配置为False 允许正常输出中文字符
indent 设置缩进格式，美化输出，可以是一个整数或者字符串
sort_keys 如果设置为True 则字典中的键会按字母顺序排序
skipkeys 如果设置为True 则跳过无法转换为json的字典键，如非字符串键

举例
import json

data = {
    "name": "张三",
    "age": 28,
    "is_student": False,
    "courses": ["数学", "物理"]
}

json_str = json.dumps(data, ensure_ascii=False, indent=4)
print(json_str)


json.loads()函数用于将json字符串解析为Python对象，接受一个json格式的字符串，返回相应的Python数据类型
import json

json_data = '''
{
    "name": "李四",
    "age": 30,
    "is_student": true,
    "courses": ["化学", "生物"]
}
'''

data = json.loads(json_data)
print(data)
输出字典类型
{'name': '李四', 'age': 30, 'is_student': True, 'courses': ['化学', '生物']}

如何理解它们之间的区别？
类型不同：一个是字符串，另一个是 Python 的数据结构（如字典、列表等）。
用途不同：JSON 主要用于数据交换，便于在网络上传输或保存到文件中；而 Python 字典主要用于程序内部处理数据。
语法细节：JSON 的布尔值是小写的 true 和 false，而 Python 中则是 True 和 False
此外JSON 不支持单引号，所有的字符串必须用双引号包围。



json.load() 和 json.dump() 是 Python 的 json 模块中用于直接从文件读取 JSON 数据和将数据写入文件的两个函数。它们分别对应于处理字符串的 json.loads() 和 json.dumps() 函数
但专门设计用于文件操作。

json.load()用于从一个文件对象中读取 JSON 编码的数据，并将其转换为对应的 Python 对象（反序列化）。

举例：
假设有一个名为 data.json 的文件，内容如下：
1.json-内容如下
{
    "name": "张三",
    "age": 28,
    "is_student": false,
    "courses": ["数学", "物理"]
}



import json

with open('data.json', 'r', encoding='utf-8') as file:
    data = json.load(file)

print(data)
输出结果将是Python字典形式的数据
{'name': '张三', 'age': 28, 'is_student': False, 'courses': ['数学', '物理']}

json.dump()用于将Python对象编码为json格式并写入到一个文件对象中，序列化
举例
如果你想将一个Python的字典保存为json文件
import json

data = {
    "name": "李四",
    "age": 30,
    "is_student": True,
    "courses": ["化学", "生物"]
}

with open('output.json', 'w', encoding='utf-8') as file:
    json.dump(data, file, ensure_ascii=False, indent=4)
    
    
这样会创建一个名为output.json的文件-output.json文件的内容如下
{
    "name": "李四",
    "age": 30,
    "is_student": true,
    "courses": [
        "化学",
        "生物"
    ]
}


json.load(fp)：从文件对象 fp 中读取 JSON 数据，并将其解析为 Python 对象。
json.dump(obj, fp)：将 Python 对象 obj 序列化为 JSON 格式的字符串，并将其写入到文件对象 fp 中
"""
data_1 = ["hello", "hi"]
data_2 = [{"name": "lx"}]
data_3 = {"age": 18}

json_data_1 = "['name','age','sex']"
json_data_2 = "[{'name': 'liming'}]"
json_data_3 = """{"age" : 18}"""
# json_data_3 = "{'age' : 18}" 使用json.loads()读取这个数据会报错，因为json不支持单引号


print(json.dumps(data_1), type(json.dumps(data_1)))
print(json.dumps(data_2), type(json.dumps(data_2)))
print(json.dumps(data_3), type(json.dumps(data_3)))


print(json.loads(json_data_3), type(json.loads(json_data_3)))



